iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

養爬蟲的人學爬蟲系列 第 24

【Day 24】將所有貼文都點讚吧!(實戰Selenium 1/2)

  • 分享至 

  • xImage
  •  

閒聊
昨天試著用Selenium和cookies做了不用登錄就可以進到Instagram裡,今天要來試著對貼文自動點讚。

預期
透過Selenium的功能,鎖定想點擊的貼文元素,並進行自動按讚動作。

實作
這邊會先需要選擇一個好友的帳號來爬取,這邊使用的是我自己的另一個帳號。
https://www.instagram.com/teresa.food.life/
程式碼的部分,可以沿用昨天的,只需要將請求的網址改成我們今天要爬取的這個帳號的網址就好了。

from selenium import webdriver
from time import sleep
import json
if _name_ == '_mian_' :
    with open('cookies_jar.json') as f :
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/teresa.food.life/')
    
    for cookie in cookies :
        driver.add_cookie(cookie)
    driver.get('https://www.instagram.com/teresa.food.life/')

https://ithelp.ithome.com.tw/upload/images/20221007/20145359JPqVcHtrm8.png

接下來可以用檢查工具查看貼文的架構,可以看到每3篇文章為一個單位,這個單位的class是 _ac7v aang_
https://ithelp.ithome.com.tw/upload/images/20221007/201453599GYjG1Xsyd.png

也可以看到1篇貼文下還有3個單位,且class是 _aagw
https://ithelp.ithome.com.tw/upload/images/20221007/20145359FB7LJ8tdry.png

確認完上面的事情之後,就可以來鎖定元素了。

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    with open('cookies_jar.json') as f:
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/teresa.food.life/')

    for cookie in cookies:
        driver.add_cookie(cookie)
		driver.get('https://www.instagram.com/teresa.food.life/')
    sleep(2)
		# 鎖定此帳號貼文的 class name
    eles = driver.find_elements_by_class_name('_aagw')
    print(eles)
    print(len(eles))

鎖定完元素後,就可以來寫for-loop讓他重複執行。

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    with open('cookies_jar.json') as f:
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/teresa.food.life/')

    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.get('https://www.instagram.com/teresa.food.life/')
    sleep(2)
		# 鎖定此帳號貼文的 class name
    eles = driver.find_elements_by_class_name('_aagw')
    for ele in eles :
        ele.click()
        break #因為還沒有寫入點擊功能,先break

再來我們可以用檢查工具查看點讚功能的class是 _ab6-,在語法中一樣是用click來點擊。
https://ithelp.ithome.com.tw/upload/images/20221007/20145359BLBuoSz6jD.png

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    with open('cookies_jar.json') as f:
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/teresa.food.life/')

    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.get('https://www.instagram.com/teresa.food.life/')
    sleep(2)
		# 鎖定此帳號貼文的 class name
    eles = driver.find_elements_by_class_name('_aagw')
    for ele in eles :
        ele.click()
        sleep(1)
        driver.find_element_by_class_name('_ab6-').click
        break

最後我們使用Xpath定位,來掉break讓程式進行就可以了!

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    with open('cookies_jar.json') as f:
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/teresa.food.life/')

    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.get('https://www.instagram.com/teresa.food.life/')
    sleep(2)
		# 鎖定此帳號貼文的 class name
    eles = driver.find_elements_by_class_name('_aagw')
    for ele in eles :
        ele.click()
        sleep(1)
        driver.find_element_by_class_name('_ab6-').click()
        sleep(1)
        driver.find_element_by_xpath('/html/body/div[6]/div[3]/button').click()

結語
今天嘗試了對貼文點讚的功能,覺得很新奇,原來還可以這麼做!/images/emoticon/emoticon12.gif
明天我們要進到Discord裡面試著自動留言。

明天!
【Day 25】想在Discord自動留言嗎?

參考資料
Instagram帳號 :https://www.instagram.com/teresa.food.life/


上一篇
【Day 23】不用帳號密碼也可以登錄Instagram嗎?(實戰Selenium 1/2)
下一篇
【Day 25】想在Discord自動留言嗎?
系列文
養爬蟲的人學爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言